{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 动量法\n",
    "使用梯度下降法，每次都会朝着目标函数下降最快的方向，这也称为最速下降法。这种更新方法看似非常快，实际上存在一些问题。\n",
    "\n",
    "## 梯度下降法的问题\n",
    "考虑一个二维输入，$[x_1, x_2]$，输出的损失函数 $L: R^2 \\rightarrow R$，下面是这个函数的等高线\n",
    "\n",
    "![](https://ws1.sinaimg.cn/large/006tKfTcly1fmnketw5f4j30az04lq31.jpg)\n",
    "\n",
    "可以想象成一个很扁的漏斗，这样在竖直方向上，梯度就非常大，在水平方向上，梯度就相对较小，所以我们在设置学习率的时候就不能设置太大，为了防止竖直方向上参数更新太过了，这样一个较小的学习率又导致了水平方向上参数在更新的时候太过于缓慢，所以就导致最终收敛起来非常慢。\n",
    "\n",
    "## 动量法\n",
    "动量法的提出就是为了应对这个问题，我们梯度下降法做一个修改如下\n",
    "\n",
    "$$\n",
    "v_i = \\gamma v_{i-1} + \\eta \\nabla L(\\theta)\n",
    "$$\n",
    "$$\n",
    "\\theta_i = \\theta_{i-1} - v_i\n",
    "$$\n",
    "\n",
    "其中 $v_i$ 是当前速度，$\\gamma$ 是动量参数，是一个小于 1的正数，$\\eta$ 是学习率"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "相当于每次在进行参数更新的时候，都会将之前的速度考虑进来，每个参数在各方向上的移动幅度不仅取决于当前的梯度，还取决于过去各个梯度在各个方向上是否一致，如果一个梯度一直沿着当前方向进行更新，那么每次更新的幅度就越来越大，如果一个梯度在一个方向上不断变化，那么其更新幅度就会被衰减，这样我们就可以使用一个较大的学习率，使得收敛更快，同时梯度比较大的方向就会因为动量的关系每次更新的幅度减少，如下图\n",
    "\n",
    "![](https://ws1.sinaimg.cn/large/006tNc79gy1fmo5l53o76j30ak04gjrh.jpg)\n",
    "\n",
    "比如我们的梯度每次都等于 g，而且方向都相同，那么动量法在该方向上使参数加速移动，有下面的公式：\n",
    "\n",
    "$$\n",
    "v_0 = 0\n",
    "$$\n",
    "$$\n",
    "v_1 = \\gamma v_0 + \\eta g = \\eta g\n",
    "$$\n",
    "$$\n",
    "v_2 = \\gamma v_1 + \\eta g = (1 + \\gamma) \\eta g\n",
    "$$\n",
    "$$\n",
    "v_3 = \\gamma v_2 + \\eta g = (1 + \\gamma + \\gamma^2) \\eta g\n",
    "$$\n",
    "$$\n",
    "\\cdots\n",
    "$$\n",
    "$$\n",
    "v_{+ \\infty} = (1 + \\gamma + \\gamma^2 + \\gamma^3 + \\cdots) \\eta g = \\frac{1}{1 - \\gamma} \\eta g\n",
    "$$\n",
    "\n",
    "如果我们把 $\\gamma$ 定为 0.9，那么更新幅度的峰值就是原本梯度乘学习率的 10 倍。\n",
    "\n",
    "本质上说，动量法就仿佛我们从高坡上推一个球，小球在向下滚动的过程中积累了动量，在途中也会变得越来越快，最后会达到一个峰值，对应于我们的算法中就是，动量项会沿着梯度指向方向相同的方向不断增大，对于梯度方向改变的方向逐渐减小，得到了更快的收敛速度以及更小的震荡。\n",
    "\n",
    "下面我们手动实现一个动量法，公式已经在上面了"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def sgd_momentum(parameters, vs, lr, gamma):\n",
    "    for param, v in zip(parameters, vs):\n",
    "        v[:] = gamma * v + lr * param.grad.data\n",
    "        param.data = param.data - v"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import torch\n",
    "from torchvision.datasets import MNIST # 导入 pytorch 内置的 mnist 数据\n",
    "from torch.utils.data import DataLoader\n",
    "from torch import nn\n",
    "from torch.autograd import Variable\n",
    "import time\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "def data_tf(x):\n",
    "    x = np.array(x, dtype='float32') / 255\n",
    "    x = (x - 0.5) / 0.5 # 标准化，这个技巧之后会讲到\n",
    "    x = x.reshape((-1,)) # 拉平\n",
    "    x = torch.from_numpy(x)\n",
    "    return x\n",
    "\n",
    "train_set = MNIST('./data', train=True, transform=data_tf, download=True) # 载入数据集，申明定义的数据变换\n",
    "test_set = MNIST('./data', train=False, transform=data_tf, download=True)\n",
    "\n",
    "# 定义 loss 函数\n",
    "criterion = nn.CrossEntropyLoss()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch: 0, Train Loss: 0.367609\n",
      "epoch: 1, Train Loss: 0.168976\n",
      "epoch: 2, Train Loss: 0.123189\n",
      "epoch: 3, Train Loss: 0.100595\n",
      "epoch: 4, Train Loss: 0.083965\n",
      "使用时间: 69.73666 s\n"
     ]
    }
   ],
   "source": [
    "train_data = DataLoader(train_set, batch_size=64, shuffle=True)\n",
    "# 使用 Sequential 定义 3 层神经网络\n",
    "net = nn.Sequential(\n",
    "    nn.Linear(784, 200),\n",
    "    nn.ReLU(),\n",
    "    nn.Linear(200, 10),\n",
    ")\n",
    "\n",
    "# 将速度初始化为和参数形状相同的零张量\n",
    "vs = []\n",
    "for param in net.parameters():\n",
    "    vs.append(torch.zeros_like(param.data))\n",
    "    \n",
    "# 开始训练\n",
    "losses = []\n",
    "\n",
    "start = time.time() # 记时开始\n",
    "for e in range(5):\n",
    "    train_loss = 0\n",
    "    for im, label in train_data:\n",
    "        im = Variable(im)\n",
    "        label = Variable(label)\n",
    "        # 前向传播\n",
    "        out = net(im)\n",
    "        loss = criterion(out, label)\n",
    "        # 反向传播\n",
    "        net.zero_grad()\n",
    "        loss.backward()\n",
    "        sgd_momentum(net.parameters(), vs, 1e-2, 0.9) # 使用的动量参数为 0.9，学习率 0.01\n",
    "        # 记录误差\n",
    "        train_loss += loss.data[0]\n",
    "        \n",
    "        losses.append(loss.data[0])\n",
    "    print('epoch: {}, Train Loss: {:.6f}'\n",
    "          .format(e, train_loss / len(train_data)))\n",
    "end = time.time() # 计时结束\n",
    "print('使用时间: {:.5f} s'.format(end - start))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到，加完动量之后 loss 能下降非常快，但是一定要小心学习率和动量参数，这两个值会直接影响到参数每次更新的幅度，所以可以多试几个值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "当然，pytorch 内置了动量法的实现，非常简单，直接在 `torch.optim.SGD(momentum=0.9)` 即可，下面实现一下"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch: 0, Train Loss: 0.369134\n",
      "epoch: 1, Train Loss: 0.176699\n",
      "epoch: 2, Train Loss: 0.125531\n",
      "epoch: 3, Train Loss: 0.100507\n",
      "epoch: 4, Train Loss: 0.083820\n",
      "使用时间: 63.79601 s\n"
     ]
    }
   ],
   "source": [
    "train_data = DataLoader(train_set, batch_size=64, shuffle=True)\n",
    "# 使用 Sequential 定义 3 层神经网络\n",
    "net = nn.Sequential(\n",
    "    nn.Linear(784, 200),\n",
    "    nn.ReLU(),\n",
    "    nn.Linear(200, 10),\n",
    ")\n",
    "\n",
    "optimizer = torch.optim.SGD(net.parameters(), lr=1e-2, momentum=0.9) # 加动量\n",
    "# 开始训练\n",
    "losses = []\n",
    "idx = 0\n",
    "start = time.time() # 记时开始\n",
    "for e in range(5):\n",
    "    train_loss = 0\n",
    "    for im, label in train_data:\n",
    "        im = Variable(im)\n",
    "        label = Variable(label)\n",
    "        # 前向传播\n",
    "        out = net(im)\n",
    "        loss = criterion(out, label)\n",
    "        # 反向传播\n",
    "        optimizer.zero_grad()\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "        # 记录误差\n",
    "        train_loss += loss.data[0]\n",
    "        if idx % 30 == 0: # 30 步记录一次\n",
    "            losses.append(loss.data[0])\n",
    "        idx += 1\n",
    "    print('epoch: {}, Train Loss: {:.6f}'\n",
    "          .format(e, train_loss / len(train_data)))\n",
    "end = time.time() # 计时结束\n",
    "print('使用时间: {:.5f} s'.format(end - start))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x112d3e978>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAD8CAYAAAB+UHOxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXmUXFd97/vddYaaq0d1qzVP1mBZkgd5whiMwcHEmABO\nuCQkBEIgEOCyLusFuPfmgUlyCSRk8fKekzhcY4aXGJwYgm3AhvjFBjwEWbJlWZY1qy21hp67a65T\n59R5f5yz9xlq7O6q7uru32ctL7m7q07tmvZ3/2ZmmiYIgiCI5UdgoRdAEARBLAwkAARBEMsUEgCC\nIIhlCgkAQRDEMoUEgCAIYplCAkAQBLFMIQEgCIJYppAAEARBLFNIAAiCIJYp8kIvoBa9vb3mhg0b\nFnoZBEEQi4YDBw6Mmaa5opHbtrUAbNiwAfv371/oZRAEQSwaGGOvNXpbcgERBEEsU0gACIIglikk\nAARBEMuUto4BEATRXIrFIoaGhpDP5xd6KcQcCYVCWLNmDRRFmfU1SAAIYhkxNDSEeDyODRs2gDG2\n0MshZolpmhgfH8fQ0BA2btw46+uQC4gglhH5fB49PT20+S9yGGPo6emZsyVHAkAQywza/JcGzXgf\nl6QAfPOZM3j0pQsLvQyCIIi2ZkkKwAO/OosfH7q40MsgCGKRcPDgQfzkJz+Zl8d6/PHHsW3bNmzZ\nsgVf/vKXK95mcnIS73rXu7B7925cd911OHz4cEvWsiQFIBqUkdH0hV4GQRCLhPkSAMMw8PGPfxyP\nPfYYjhw5gu9+97s4cuRI2e2+9KUv4corr8ShQ4fwne98B5/61Kdasp4lKQCxoIx0gQSAINqNwcFB\nbN++HR/4wAewdetWvO9978MTTzyBm266CZdddhn27dsHAJiYmMA73/lO7N69GzfccAMOHToEALj7\n7rvx+7//+7j55puxfv16/OAHP8BnPvMZ7Nq1C7fffjuKxSIA4MCBA3jjG9+Ia665Bm9961tx8aLl\nEbjlllvw2c9+Ftdddx22bt2KX/7yl9A0DZ///Ofx4IMP4sorr8SDDz6Iu+++G1/96lfFuq+44goM\nDg42vP5q7Nu3D1u2bMGmTZugqire+9734uGHHy673ZEjR3DrrbcCALZv347BwUEMDw/P/Q3wsSTT\nQKNBCSMpynMmiFp88dFXcORCsqnXvHxVAl+4c2fN25w8eRL/+q//ivvvvx/XXnstHnjgATz99NN4\n5JFH8KUvfQk//OEP8YUvfAFXXXUVfvjDH+I//uM/8P73vx8HDx4EAJw6dQpPPvkkjhw5ghtvvBHf\n//738Vd/9Vd417vehR//+Me444478MlPfhIPP/wwVqxYgQcffBD/83/+T9x///0AAF3XsW/fPvzk\nJz/BF7/4RTzxxBP4sz/7M+zfvx/33HMPAEto5rL+/fv3495778V9993nue/58+exdu1a8fOaNWvw\nq1/9quwx9uzZgx/84Ae4+eabsW/fPrz22msYGhpCf39/Q+9DoyxRAZCRKRgLvQyCICqwceNG7Nq1\nCwCwc+dOvPnNbwZjDLt27cLg4CAA4Omnn8b3v/99AMCtt96K8fFxJJOWWL3tbW+DoijYtWsXDMPA\n7bffDgDi/seOHcPhw4dx2223AbDcLgMDA+Lx3/3udwMArrnmGvF4zV7/3r17yzb/mfC5z30On/rU\np3DllVdi165duOqqqyBJ0qyvV422FADG2J0A7tyyZcus7k8uIIKoT72TeqsIBoPi/wOBgPg5EAhA\n1+t/b923VxRFpEPy+5umiZ07d+K5556reX9Jkqo+nizLKJVK4md3vv1c1r969WqcO3dO/Dw0NITV\nq1eX3S6RSOCb3/wmAKvoa+PGjdi0aVPNa8+GtowBmKb5qGmaH+no6JjV/S0LwPogEASx+Lj55pvx\nz//8zwCAp556Cr29vUgkEg3dd9u2bRgdHRUCUCwW8corr9S8TzweRyqVEj9v2LABL7zwAgDghRde\nwJkzZ2bzNMq49tprceLECZw5cwaapuF73/se3vGOd5TdbmpqCpqmAQDuu+8+vOENb2j4+c+EthSA\nuRILytBLJgp6qf6NCYJoO+6++24cOHAAu3fvxuc+9zl8+9vfbvi+qqrioYcewmc/+1ns2bMHV155\nJZ599tma93nTm96EI0eOiCDwXXfdhYmJCezcuRP33HMPtm7dOqP179+/H3/4h39Y9ntZlnHPPffg\nrW99K3bs2IH3vOc92LnTssTuvfde3HvvvQCAV199FVdccQW2bduGxx57DH/7t387o8dvFNbOp+S9\ne/easxkI8+1nB/GFR17BgT99C3piwfp3IIhlwquvvoodO3Ys9DKIJlHp/WSMHTBNc28j91+SFkA0\naIU2KBBMEARRnSUpALGgFS1PFYoLvBKCIIj2ZUkKAFkABFGddnb7Eo3TjPdxiQsApYIShJtQKITx\n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\nSgFERAzqLxIbIBORLYJtAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x112aca438>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_axis = np.linspace(0, 5, len(losses), endpoint=True)\n",
    "plt.semilogy(x_axis, losses, label='momentum: 0.9')\n",
    "plt.legend(loc='best')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们可以对比一下不加动量的随机梯度下降法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch: 0, Train Loss: 0.735494\n",
      "epoch: 1, Train Loss: 0.364616\n",
      "epoch: 2, Train Loss: 0.318786\n",
      "epoch: 3, Train Loss: 0.290835\n",
      "epoch: 4, Train Loss: 0.268683\n",
      "使用时间: 50.32162 s\n"
     ]
    }
   ],
   "source": [
    "# 使用 Sequential 定义 3 层神经网络\n",
    "net = nn.Sequential(\n",
    "    nn.Linear(784, 200),\n",
    "    nn.ReLU(),\n",
    "    nn.Linear(200, 10),\n",
    ")\n",
    "\n",
    "optimizer = torch.optim.SGD(net.parameters(), lr=1e-2) # 不加动量\n",
    "# 开始训练\n",
    "losses1 = []\n",
    "idx = 0\n",
    "start = time.time() # 记时开始\n",
    "for e in range(5):\n",
    "    train_loss = 0\n",
    "    for im, label in train_data:\n",
    "        im = Variable(im)\n",
    "        label = Variable(label)\n",
    "        # 前向传播\n",
    "        out = net(im)\n",
    "        loss = criterion(out, label)\n",
    "        # 反向传播\n",
    "        optimizer.zero_grad()\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "        # 记录误差\n",
    "        train_loss += loss.data[0]\n",
    "        if idx % 30 == 0: # 30 步记录一次\n",
    "            losses1.append(loss.data[0])\n",
    "        idx += 1\n",
    "    print('epoch: {}, Train Loss: {:.6f}'\n",
    "          .format(e, train_loss / len(train_data)))\n",
    "end = time.time() # 计时结束\n",
    "print('使用时间: {:.5f} s'.format(end - start))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x112fc1e80>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x112d44978>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_axis = np.linspace(0, 5, len(losses), endpoint=True)\n",
    "plt.semilogy(x_axis, losses, label='momentum: 0.9')\n",
    "plt.semilogy(x_axis, losses1, label='no momentum')\n",
    "plt.legend(loc='best')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到加完动量之后的 loss 下降的程度更低了，可以将动量理解为一种惯性作用，所以每次更新的幅度都会比不加动量的情况更多"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "mx",
   "language": "python",
   "name": "mx"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
